#ifndef __WS_UMMSG_MAP__
#define __WS_UMMSG_MAP__
#include "Private.h"
#include <cinttypes>
#include <map>
#include <memory>

namespace sdk {
namespace msg {
/* ***************************************************
    * Mapping Between UserSide Data and ModuleSide Data
    * ***************************************************/
class UMMsgMap
{
public:
    using UDirectID = std::pair<std::string_view, std::string_view>;
    using MDirectID = std::pair<EJsonMsgNamesp, EJsonMsgName>;

public:
    static std::optional<UDirectID> map(const MDirectID &);
    static std::optional<MDirectID> map(const UDirectID &);
    static std::optional<std::string_view> getName(const MDirectID &);
    static std::optional<EJsonMsgName> getName(const UDirectID &);
    static std::optional<std::string_view> getNamespace(const MDirectID &);
    static std::optional<EJsonMsgNamesp> getNamespace(const UDirectID &);

private:
    static const std::map<MDirectID, UDirectID> m_moduleUserMap;
    static const std::map<UDirectID, MDirectID> m_userModuleMap;
};

}// namespace msg
} // namespace sdk
#endif // ! __WS_UMMSG_MAP__
